#include <gtest/gtest.h>
#include <string>

using namespace ::std;

class Solution {
public:
    bool isPalindrome(int x);
};

// 整型转字符串，从双指针从首尾字符开始，判断是否相等，
// 每次迭代两个指针往各自方向移动一位
bool Solution::isPalindrome(int x) {
	string s = to_string(x);
	int i, j;
	for(i = 0, j = s.size() - 1; i <= j && s[i] == s[j]; ++i, --j) ;
	if(i > j) return true;
	return false;
}

// v01 
// 把整型翻转，最低位与最高位互换，迭代。如果是回文数，则翻转之后的数字与原数字相等
// runtime error: signed integer overflow: 998765432 * 10 cannot be represented in type 'int'
// bool Solution::isPalindrome(int x) {
// 	// 用int类型可能会有溢出异常，用long型可以避免，但这样简单粗暴，意义不大，但起码要能注意到这方面的问题。
// 	int tmp = x, y = 0;
// 	long tmp = x, y = 0;
// 	while(tmp > 0) {
// 		y = y * 10 + tmp % 10;
// 		tmp /= 10;
// 	}
// 	return x == y ? true : false;
// }

class IsPalindromeCheck : public ::testing::Test {
public:
	class Solution solution;
};

TEST_F(IsPalindromeCheck, testIsPalindrome_1) {
	int x = 121;
	EXPECT_EQ(true, solution.isPalindrome(x));
}

TEST_F(IsPalindromeCheck, testIsPalindrome_2) {
	int x = 10;
	EXPECT_EQ(false, solution.isPalindrome(x));
}

int main() {
	::testing::InitGoogleTest();
	return RUN_ALL_TESTS();
}
